ref: https://engineering.hellofresh.com/ambassador-the-evolution-of-ingress-gateway-at-hellofresh-3889232cab6f
本篇文章是 HelloFresh 這個美國生鮮食材訂購服務想要分享其團隊中 Ingress gateway 的演化史。該團隊過往使用 VM 作為其底層基礎架構來部署應用程式,後來遷移到
kubernetes 改用容器來部署,然而其內部的其他元件並沒有隨者 kubernetes 轉移而一併更新,譬如文章要探討的 Ingress gateway。
因此文章後將探討原先的 Ingress gateway 架構以及相關問題,最後如何將其與 kubernetes 進行整合來解決前述問題。
再使用 kubernetes 之前,團隊使用兩種不同的方式來處理,分別是內部 API Gateway Janus 以及網頁處理的 Entry (基於 Nginx 的 Reverse-Proxy)
團隊遷移到 kubernetes 之後,這兩個服務都想要透過 kubernetes Nginx Ingress 來處理,不過處理的過程中卻遇到一些問題。
1. 一致性: 每個微服務一開始都透過 Ingress 讓外界存取,然而當團隊開始使用 istio 後有些服務就改使用 Istio Ingress-Gateway 來處理,其他想要使用 TCP 的服務則會改使用 AWS ELB 來處理。
2. 延遲性: 因為 API Gateway 的存取節點都是基於 FQDN 的方式來存取,所以每個封包都要經過更多的節點來到達最終目的,這會增加整個封包傳輸時間。
最大的困惱還是第一個一致性的問題,k8s中有太多的方式讓外界可以存取期服務,每個都有自己獨特的設定,監控以及警示。
為了針對這些問題去解決,團隊內部先期構思一下到底什麼是團隊中理想的 Ingress Gateway
1. Reverse Proxy (HTTP) for websites
2. Mixture of an API Gateway
3. Kubernetes native
4. Advanced routing : (headers, methods, path)-based
5. JWT scope validation
6. Reliability features: Rate-limiting, Retries, Circuit breaking
7. Traffic shadowing
8. Interface for extensions
9. Integration with service mesh
後續文章包含了一些內容,如
1. 作者接者談談為什麼不使用 Service Mesh 所提供的 Ingress gateway
2. 到底要自行開發還是購買解決方案?(最後選擇了 Ambassador Edge Stack)
3. 如何透過 Ambassador Edge Stack 來解決團隊問題
4. 透過 Ambassador Edge Stack 後帶來的好處
有興趣的別忘了參閱全文
「k8s nginx」的推薦目錄:
- 關於k8s nginx 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於k8s nginx 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於k8s nginx 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的最佳解答
- 關於k8s nginx 在 Ingress-NGINX Controller for Kubernetes - GitHub 的評價
- 關於k8s nginx 在 How to use NGINX Ingress with Kubernetes in 2023 - YouTube 的評價
- 關於k8s nginx 在 Kubernetes Angular deployed in Nginx to access endpoint of ... 的評價
k8s nginx 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
本篇文章是一個深度介紹文,除了探討 K3S 與 K3D 的關係之外,還針對 K3D 的架構與使用方法很詳細的介紹一番,包含了
1. K3D v3 的特色與架構
2. 如何替換 K3D 裡面的 CNI
3. 如何替換 k3D 預設的 Ingress Controller
4. 使用 private registry 來處理
Kubernetes 的變化版本很多,除了 k3s 之外後來還有 k0s 的出現,每個版本都有自己想要解決的問題,而 k3s 則是一個非常輕量的 Kubernetes 版本,其特色有
1. 使用 Flannel 作為其預設 CNI,不講求太多複雜功能,單純用 VXLAN 打造一個 L2 的 overlay 網路
2. 使用 CoreDNS,與原生一樣
3. 使用 SQLite3 當作預設的 DB,而非 etcd3
4. 使用 Traefik 當作預設的 Ingress Controller,原生 K8s 則把這個主動權交給使用者
5. 使用 Containerd 當作預設的 Container Runtime
而 K3D 就是基於 K3S 的測試環境, K3S in Docker,跟 KIND 類似,只是運行的 Kubernetes 發行版本不同。
相較於 KIND 而已, K3D 的架構稍微複雜一點
1. 為了方便測試與存取,k3D 部署的時候也會部署一個 Nginx Server 來當作簡易的 Load-Balacner,讓 K3D 內的 Ingress 服務可以更簡易的被存取。使用者只需要存取該 Load-Balancer 即可,不需要去針對 Node(Docker) 的 IP 存取
2. 可以支援動態加入與刪除節點
本篇文章算是非常詳細的介紹各種參數用法,對於 K3D 這種測試環境有興趣的可以參考看看
https://yannalbou.medium.com/k3s-k3d-k8s-a-new-perfect-match-for-dev-and-test-e8b871aa6a42
k8s nginx 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的最佳解答
當我們把系統部署在K8S(Kubernates)的環境中 需要設定對外PORT才能對外提供服務 對於這點, 我們只需要在需要開放的容器設定公開, 再選擇負載平衡器就可以了( ) 但你可能會發現 這樣產生的服務只有外部網路的IP, 如果被有心人士取得, 可能會造成資安的問題 所以我們會比較希望將不需要對外的服務利用內部網路做連結 然而這個GKE的介面, 卻沒辦法設定內部網路IP 好在, 這個問題還是可以解決的... 首先呢, 我們可以先進入我們想要設定服務的GKE叢集 點選連結 這裡使用GCP附送的免費Cloud Shell來做操作(類似免費的有限空間Linux) 照理說使用GCP的SDK應該也是可以在本地做, 不過感覺有點麻煩, 使用Cloud Shell應該比較簡單 但這個有使用時間的問題, 一周好像免費50小時?? 之前遇過一次, 不過忘了 點在Cloud Shell中執行 一開始需要授權, 點選授權, 接著就可以進入 其實這個指令是用來切換K8s的群集 以這條命令資料來說, 就是切換位於asia-southeast1-a區域, 專案xxxx的it-test群集 就改成自己需要的群集 顯示切換到it-test成功 輸入kubectl get pod 可以查看目前這個群集部署的系統 以這個部分來說, 水哥部署了一個nginx容器當作測試 那我們需要針對nginx開啟對外Port與IP才能提供服務 這裡可以看到已經開了兩個LoadBalancer, 分別是使用35.247.177.243與10.148.15.213做為External-IP對外服務 其中10.148.15.213為內部IP, 也就是我們這次想要實現的 而從介面的部分來看則是這樣 可以比較明顯的看到一個顯示外部負載平衡器, 一個則是顯示內部負載平衡器 然而, GKE的介面不允許建立內部的...這也讓我在這裡卡很久 那要怎麼做呢? 我們先刪除這兩個服務, 重新建立...
https://mshw.info/mshw/?p=26417
k8s nginx 在 How to use NGINX Ingress with Kubernetes in 2023 - YouTube 的推薦與評價
Subscribe to show your support! https://goo.gl/1Ty1Q2 .Patreon http://patreon.com/marceldempersCheckout the source code below and ... ... <看更多>
k8s nginx 在 Ingress-NGINX Controller for Kubernetes - GitHub 的推薦與評價
ingress-nginx is an Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer. Learn more about Ingress on the main Kubernetes ... ... <看更多>